#include "pcpt_comm/pcpt_comm_polygon.h"

/**************************************************************************************
功能描述: 点是否在多边形内部
修改记录:
**************************************************************************************/
bool ANY_POLYGON_EX_C::IsPointIn(const COORDINATE_2D_STRU &stPoint,
                                 const COORDINATE_2D_STRU astPoint[], int pointNum)
{
    objAnyPolygon_.Reset(astPoint, pointNum);
    return objAnyPolygon_.IsPointIn(stPoint);
}

bool ANY_POLYGON_EX_C::IsPointIn(const COORDINATE_2D_STRU &stPoint,
                                 const vector<COORDINATE_2D_STRU> &vstPoint)
{
    int pointNum = vstPoint.size();
    COORDINATE_2D_STRU astPoint[pointNum];

    for (int i = 0; i < pointNum; ++i) {
        astPoint[i] = vstPoint[i];
    }
    
    return IsPointIn(stPoint, astPoint, pointNum);
}
                                 
/**************************************************************************************
功能描述: 计算任意平面多边形面积
修改记录:
**************************************************************************************/
double ANY_POLYGON_EX_C::PolygonArea(const COORDINATE_2D_STRU astPoint[], int pointNum)
{
    vector<COORDINATE_2D_STRU> vstPoint(astPoint, astPoint + pointNum);
    return PolygonArea(vstPoint);
}

double ANY_POLYGON_EX_C::PolygonArea(const vector<COORDINATE_2D_STRU> &vstPoint)
{
    return objIoU_.PloygonArea(vstPoint);
}

/**************************************************************************************
功能描述: 计算任意平面多边形的IoU(交并比)
修改记录:
**************************************************************************************/
float ANY_POLYGON_EX_C::IoUOfPolygon(const vector<COORDINATE_2D_STRU> &vstPointA,
                                     const vector<COORDINATE_2D_STRU> &vstPointB)
{
    return objIoU_.IoUOfPolygon(vstPointA, vstPointB);
}